(n, m) = map(int, input().split(' '))
all = []
for i in range(m):
(a, b) = map(int, input().split(' '))
all.append([a, b])
all.sort(key=lambda x:x[1])
all.reverse()
matches = 0
for sublist in all:
if sublist[0] < n:
matches += sublist[1] * sublist[0]
n -= sublist[0]
else:
matches += n * sublist[1]
break
print(matches)
#include <bits/stdc++.h>
using namespace std;
#define en "\n"
#define ll long long
struct node{
ll a;
int b;
};
bool comp(node a, node b){
return a.b < b.b;
}
int main()
{
ll n;
int m;
cin>>n>>m;
vector <node> v;
while (m--){
ll a;
int b;
cin>>a>>b;
node c;
c.a = a;
c.b = b;
v.push_back(c);
}
sort(v.begin(), v.end(), comp);
ll sum=0;
for (int i=v.size()-1;n>0 && i>=0;i--){
if(v[i].a <= n){
sum += (v[i].b * v[i].a);
n-=v[i].a;
}
else if (n < v[i].a){
sum += (v[i].b * n);
break;
}
}
cout<<sum;
return 0;
}
450. Delete Node in a BST | 445. Add Two Numbers II |
442. Find All Duplicates in an Array | 437. Path Sum III |
436. Find Right Interval | 435. Non-overlapping Intervals |
406. Queue Reconstruction by Height | 380. Insert Delete GetRandom O(1) |
332. Reconstruct Itinerary | 368. Largest Divisible Subset |
377. Combination Sum IV | 322. Coin Change |
307. Range Sum Query - Mutable | 287. Find the Duplicate Number |
279. Perfect Squares | 275. H-Index II |
274. H-Index | 260. Single Number III |
240. Search a 2D Matrix II | 238. Product of Array Except Self |
229. Majority Element II | 222. Count Complete Tree Nodes |
215. Kth Largest Element in an Array | 198. House Robber |
153. Find Minimum in Rotated Sorted Array | 150. Evaluate Reverse Polish Notation |
144. Binary Tree Preorder Traversal | 137. Single Number II |
130. Surrounded Regions | 129. Sum Root to Leaf Numbers |